<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script src="../WPromise.js"></script>
<script>
    function fn2() {
        console.log('fn2')
        return Promise.resolve(Promise.reject('fn2'))
    }

    function fn3() {
        return new Promise(((resolve, reject) => {
            setTimeout(() => {
                console.log('fn3')
                resolve('fn3')
            }, 200)
        }))
    }

    var p = Promise.race([fn2(), fn3()]) // 返回最新执行完成的promise实例
    console.log('实例p', p)

    var p1 = p.then((values) => { // 如果成功执行第一个方法，失败则执行第二个方法
        console.log('成功执行：', values)
        return 'ok'
    }, (reason) => {
        console.log('失败执行：', reason)
        return 'no'
    }).finally(function () { // finally方法执行后代码不报错则返回跟之前then相同的实例，报错就返回失败的实例，值为报错原因
        console.log(100);
        b;
    }).then(function (value) {
        console.log('finally后成功执行：', value)
        return 1000;
    }, function (reason) {
        console.log('finally后失败执行：', reason)
    })
    console.log('新实例p1', p1) // p1实例的状态和值与p中then方法执行是否报错和返回值有关
</script>
</body>
</html>
